﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using BusinessLogicLayer;
using DataAccessLayer;
using Entities;


namespace QuanLyTKB_TienDoGD.QuanLyKeHoachGD                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
{
    public partial class frmThemKeHoachGiangDay : Office2007Form
    {
        public IRepository<ChiTietKeHoachGiangDay> _repository; // khai báo thuộc tính _repository
        public ChiTietKeHoachGiangDayManager _ctManager;    // khai báo thuộc tính _ctManager
        public QuanLyKeHoachManager _manager;   // khai báo thuộc tính _manager
        public bool _isUpdate;  // khai báo thuộc tính _isUpdate
        public bool _selectAll; // khai báo thuộc tính _selectAll
        public frmQuanLyKeHoachGiangDay frmParent;  // khai báo thuộc tính frmParent
        public QuanLyKeHoachGiangDay ql;    // khai báo thuộc tính ql
        public ChiTietKeHoachGiangDay ct;   // khai báo thuộc tính cl

        public frmThemKeHoachGiangDay()
        {
            InitializeComponent();
            dgvChiTietKeHoachGiangDay.AutoGenerateColumns = false;
        }

        /// <summary>
        /// phương thức khởi tạo với 3 tham số đầu vào
        /// </summary>
        /// <param name="ma"></param>
        /// <param name="frm"></param>
        /// <param name="_ql"></param>
        public frmThemKeHoachGiangDay(QuanLyKeHoachManager ma, frmQuanLyKeHoachGiangDay frm, QuanLyKeHoachGiangDay _ql = null)
            : this()
        {
            this._manager = ma;
            this.ql = _ql;
            _isUpdate = (_ql != null);
            this.frmParent = frm;
        }

        /// <summary>
        /// sự kiện load form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmThemKeHoachGiangDay_Load(object sender, EventArgs e)
        {
            if(_isUpdate)
            {
                txtMaQuanLy.Text = ql.MaQL;
                nrudHocKy.Value = Convert.ToInt32(ql.HocKy.ToString());
                mtbNamHoc.Text = ql.NamHoc;

                _repository = new Repository<ChiTietKeHoachGiangDay>();
                _ctManager = new ChiTietKeHoachGiangDayManager(_repository);
                dgvChiTietKeHoachGiangDay.DataSource = ChiTietKeHoachGiangDay.Repository.Find(t => t.MaQL == ql.MaQL).ToList();
            }
            txtMaQuanLy.ReadOnly = _isUpdate;
        }

        /// <summary>
        /// xử lý sự kiện khi nhấn vào button lưu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLuu_Click(object sender, EventArgs e)
        {
            ql = new QuanLyKeHoachGiangDay();
            ql.MaQL = txtMaQuanLy.Text;
            ql.NamHoc = mtbNamHoc.Text;
            ql.HocKy = nrudHocKy.Value.ToString();

            var result = _manager.Validate(ql);
            if (result.Valid || _isUpdate)
            {
                var aresult = _manager.InsertOrUpdate(ql);
                if (aresult.Success)
                {
                    frmParent.btnLamMoi.PerformClick();
                    MessageBox.Show("Thêm hoặc cập nhật quản lý kế hoạch giảng dạy thành công.");
                    btnMacDinh.PerformClick();
                }
                else MessageBox.Show(aresult.GetErrosMessages());
            }
            else MessageBox.Show(result.ToString());
        }

        /// <summary>
        /// xử lý sự kiện khi nhấn vào button mặc định
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnMacDinh_Click(object sender, EventArgs e)
        {
            txtMaQuanLy.ResetText();
            mtbNamHoc.ResetText();
            nrudHocKy.Value = 0;

        }

        /// <summary>
        /// sự kiện thoát
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// xử lý sự kiện khi chọn contextmenu làm mới
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctmLammoi_Click(object sender, EventArgs e)
        {
            dgvChiTietKeHoachGiangDay.DataSource = ChiTietKeHoachGiangDay.Repository.Find(s => s.MaQL == txtMaQuanLy.Text).ToList();
        }
        
        /// <summary>
        /// phương thức thêm kế hoạch giảng dạy trước
        /// </summary>
        /// <returns></returns>
        public bool ThemKeHoachGiangDayTruoc()
        {
            ql = new QuanLyKeHoachGiangDay();
            ql.MaQL = txtMaQuanLy.Text;
            ql.NamHoc = mtbNamHoc.Text;
            ql.HocKy = nrudHocKy.Value.ToString();
            var result = _manager.Validate(ql);
            if (result.Valid)
            {
                var aResult = _manager.InsertOrUpdate(ql);
                if (aResult.Success)
                {
                    DialogResult = DialogResult.OK;
                    return true;
                }
                else MessageBox.Show(aResult.GetErrosMessages());

            }
            else MessageBox.Show(result.ToString());
            return false;
        }

        /// <summary>
        /// xử lý sự kiện khi chọn contextmenu thêm chi tiết kế hoạch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctmThemChiTietKeHoach_Click(object sender, EventArgs e)
        {
            if (ThemKeHoachGiangDayTruoc())
            {
                var frm = new frmThemChiTietKeHoachGiangDay(new ChiTietKeHoachGiangDayManager(ChiTietKeHoachGiangDay.Repository), this);
                frm._maQL = txtMaQuanLy.Text;
                frm.ShowDialog();
                ctmLammoi.PerformClick();
            }
        }
        
        /// <summary>
        /// xử lý sự kiên khi chọn contextmenu cập nhật chi tiết kế hoạch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctmCapNhatChiTietKeHoach_Click(object sender, EventArgs e)
        {
            if (dgvChiTietKeHoachGiangDay.SelectedRows.Count > 0)
            {
                ct = new ChiTietKeHoachGiangDay();
                DataGridViewRow dr = dgvChiTietKeHoachGiangDay.SelectedRows[0];
                ct.MaKH = dr.Cells[0].Value.ToString();
                ct.MaLop = dr.Cells[1].Value.ToString();
                ct.GhepLop = dr.Cells[2].Value.ToString();
                ct.MaMH = dr.Cells[3].Value.ToString();

                List<GiaoVien> ds = GiaoVien.Repository.Find(s => s.TenGV == dr.Cells[5].Value.ToString()).ToList();
                ct.MaGV = ds[0].MaGV;

                ct.SoTietLTDaDay = Convert.ToInt32(dr.Cells[9].Value.ToString());
                ct.SoTietLTConLai = Convert.ToInt32(dr.Cells[10].Value.ToString());
                ct.SoTietTHDaDay = Convert.ToInt32(dr.Cells[11].Value.ToString());
                ct.SoTietTHConLai = Convert.ToInt32(dr.Cells[12].Value.ToString());
                ct.SoTuanConLai = Convert.ToInt32(dr.Cells[13].Value.ToString());
                ct.MaQL = txtMaQuanLy.Text;

                var frm = new frmThemChiTietKeHoachGiangDay(new ChiTietKeHoachGiangDayManager(ChiTietKeHoachGiangDay.Repository), this, ct);
                frm._maQL = txtMaQuanLy.Text;
                frm.ShowDialog();
                ctmLammoi.PerformClick();
            }
        }

        /// <summary>
        /// xử lý sự kiện khi chọn contextmenu xóa chi tiết kế hoạch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctmXoaChiTietKeHoach_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn xóa các chi tiết kế hoạch giảng dạy không", "Thông báo", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
                return;
            foreach (DataGridViewRow dr in dgvChiTietKeHoachGiangDay.Rows)
            {
                if (dr.Selected)
                {
                    MessageBox.Show("Xóa chi tiết kế hoạch giảng dạy thành công", "Thông báo");
                    ChiTietKeHoachGiangDay.Repository.Delete(ChiTietKeHoachGiangDay.Repository.GetByID((dr.Cells[0].Value.ToString())));
                }
                
            }
            //dgvChiTietKeHoachGiangDay.DataSource = ChiTietKeHoachGiangDay.Repository.Find(s => s.MaQL == txtMaQuanLy.Text).ToList();
            ctmLammoi.PerformClick();
        }

        /// <summary>
        /// xử lý sự kiện khi chọn contextmenu tìm kiếm kế hoạch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ctmTimKiemKeHoach_Click(object sender, EventArgs e)
        {
            grbTimKiem.Enabled = true;
        }

        /// <summary>
        /// xử lý sự kiện khi chọn radiobutton lớp học
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rdbLopHoc_CheckedChanged(object sender, EventArgs e)
        {
            lblSoTuanConLai.Visible = false;
        }

        /// <summary>
        /// xử lý sự kiện khi chọn radiobutton số tuận còn lại
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void rdbSoTuanConLai_CheckedChanged(object sender, EventArgs e)
        {
            lblSoTuanConLai.Visible = true;
        }

        /// <summary>
        /// xử lý sự kiện khi nhập vào textbox tìm kiếm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtTimKiem_TextChanged(object sender, EventArgs e)
        {
            var result = new ActionResultAsList<ChiTietKeHoachGiangDay>();
            if (rdbLopHoc.Checked)
            {
                result = _ctManager.Find(s => s.MaLop.IndexOf(txtTimKiem.Text) >= 0 && s.MaQL == txtMaQuanLy.Text);
            }
            if (rdbSoTuanConLai.Checked)
            {
                result = _ctManager.Find(s => s.SoTuanConLai >= Convert.ToInt32(txtTimKiem.Text) && s.MaQL == txtMaQuanLy.Text);
            }
            if (result.Success)
                dgvChiTietKeHoachGiangDay.DataSource = result.Result;
            else {
                if (txtTimKiem.Text == "")
                    ctmLammoi.PerformClick();
                else dgvChiTietKeHoachGiangDay.DataSource = null;
            }
        }

        /// <summary>
        /// xử lý sự kiện khi nhấn vào button in
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnIn_Click(object sender, EventArgs e)
        {
            //frmInChiTietKeHoachGiangDay frm = new frmInChiTietKeHoachGiangDay();
            //frm.Show();
        }

        /// <summary>
        /// xử lý sự kiện xảy ra khi người dùng nhấp vào một tiêu đề cột. 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvChiTietKeHoachGiangDay_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex == 0 && dgvChiTietKeHoachGiangDay.Rows.Count > 0)
            {
                for (int i = 0; i < dgvChiTietKeHoachGiangDay.Rows.Count; i++)
                {
                    bool select = dgvChiTietKeHoachGiangDay.Rows[i].Selected;
                    dgvChiTietKeHoachGiangDay.Rows[i].Cells[0].Value = select;
                }
            }
        }

        /// <summary>
        /// xử lý sự kiện khi kết thúc việc sửa dữ liệu của một ô
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvChiTietKeHoachGiangDay_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 0 && dgvChiTietKeHoachGiangDay.Rows[e.RowIndex].Cells[0].Value != null)
            {
                bool select = (bool)dgvChiTietKeHoachGiangDay.Rows[e.RowIndex].Cells[0].Value;
                dgvChiTietKeHoachGiangDay.Rows[e.RowIndex].Selected = select;
            }
        }

        
        

        

        

    }
}
